#include<iostream>
#include<unistd.h>
#include<signal.h>
using namespace std;




// #include <stdio.h>
// int main()
// {
// 	int* p;//局部变量未初始化，默认未随机值
// 	*p = 20;
//     cout << "p = " << *p << endl;
// 	return 0;
// }

// // #include <iostream>
// // int main() {
// //     int* p = nullptr;
// //     std::cout << "nullptr 的地址值: " << (int)p << std::endl;
// //     return 0;
// // }

// int cnt = 0;
// void handler(int signal)
// {
//     cout<<"进程捕捉到了一个信号，信号编号是:"<<signal<<endl;
//     cout << "cnt = " << cnt << endl;
//     exit(1);
// }
// int main(int argc,char*argv[])
// {
//     //软件条件
//     signal(SIGALRM, handler);
//     alarm(1);
//     while(true)
//     {
//         cnt++;
//     }
// }

// int main(int argc,char*argv[])
// {
//     //软件条件
//     alarm(1);
//     int cnt = 0;
//     while(true)
//     {
//         cout<<"cnt:"<<cnt++<<endl;
//     }
// }


// #include <stdio.h>
// #include <unistd.h>
// #include <string.h>
// #include <stdlib.h>
// #include <sys/types.h>
// #include <sys/wait.h>
// int main()
// {
// 	int fd[2] = { 0 };
// 	if (pipe(fd) < 0){ //使用pipe创建匿名管道
// 		perror("pipe");
// 		return 1;
// 	}
// 	pid_t id = fork(); //使用fork创建子进程
// 	if (id == 0){
// 		//child
// 		close(fd[0]); //子进程关闭读端
// 		//子进程向管道写入数据
// 		const char* msg = "hello father, I am child...";
// 		int count = 10;
// 		while (count--){
// 			write(fd[1], msg, strlen(msg));
// 			sleep(1);
// 		}
// 		close(fd[1]); //子进程写入完毕，关闭文件
// 		exit(0);
// 	}
// 	//father
// 	close(fd[1]); //父进程关闭写端
// 	close(fd[0]); //父进程直接关闭读端（导致子进程被操作系统杀掉）
// 	int status = 0;
// 	waitpid(id, &status, 0);
// 	printf("child get signal:%d\n", status & 0x7F); //打印子进程收到的信号
// 	return 0;
// }


// void handler(int signal)
// {
//     cout<<"进程捕捉到了一个信号，信号编号是:"<<signal<<endl;
//     sleep(1);
// }
// int main(int argc,char*argv[])
// {
//     while(true)
//     {
//         cout<<"我在运行中..."<<endl;
//         sleep(1);
//         int*p = nullptr;
//         *p=10;
//     }
// }

// int main(int argc,char*argv[])
// {
//    signal(8, handler);
//     while(true)
//     {
//         cout<<"我在运行中..."<<endl;
//         sleep(1);
//         int a = 10;
//         a/=0;
//     }
// }

// int main()
// {
//     while(true)
//     {
//         cout<<"我是一个进程:"<<getpid()<<endl;
//         sleep(1);
//     }
//     return 0;
// }

// void handler(int signal)
// {
//     cout<<"进程捕捉到了一个信号，信号编号是:"<<signal<<endl;
// }
// int main()
// {
//     //signal函数的调用，并不是handler的调用
//     //这仅仅是设置了对2号信号的捕捉方法，并不代表该方法被调用了
//     //一般这个方法不会执行，除非收到对应的信号
//     signal(2,handler);
//     while(true)
//     {
//         cout<<"我是一个进程:"<<getpid()<<endl;
//         sleep(1);
//     }
//     return 0;
// }

